跳到主要内容

HTTPS

HTTPS (全称: Hyper Text Transfer Protocol over SecureSocket Layer ),是以安全为目标的 HTTP 通道,在 HTTP 的基础上通过传输加密和身份认证保证了传输过程的安全性 。 HTTPS 在 HTTP 的基础下加入 SSL , HTTPS 的安全基础是 SSL ,因此加密的详细内容就需要 SSL 。 HTTPS 存在不同于 HTTP 的默认端口及一个加密 / 身份验证层(在 HTTP 与 TCP 之间)。这个系统提供了身份验证与加密通讯方法。它被广泛用于万维网上安全敏感的通讯,例如交易支付等方面

关于 HTTP 的明文数据传输 , 攻击者最常用的攻击手法就是网络嗅探 , 试图从传输过程当中分析出敏感的数据 , 例如管理员对 Web 程序后台的登录过程等等 , 从而获取网站管理权限 , 进而渗透到整个服务器的权限。即使无法获取到后台登录信息 , 攻击者也可以从网络中获取普通用户的隐秘信息 , 包括手机号码 , 身份证号码 , 信用卡号等重要资料 , 导致严重的安全事故。进行网络嗅探攻击非常简单 , 对攻击者的要求很低。使用网络发布的任意一款抓包工具 , 一个新手就有可能获取到大型网站的用户信息 。

另外 ,HTTP 在传输客户端请求和服务端响应时 , 唯一的数据完整性检验就是在报文头部包含了本次传输数据的长度 , 而对内容是否被篡改不作确认。 因此攻击者可以轻易的发动中间人攻击 , 修改客户端和服务端传输的数据 , 甚至在传输数据中插入恶意代码 , 导致客户端被引导至恶意网站被植入木马。

改进目标

  • 数据保密性:保证数据内容在传输的过程中不会被第三方查看。就像快递员传递包裹一样,都进行了封装,别人无法获知里面装了什么
  • 数据完整性:及时发现被第三方篡改的传输内容。就像快递员虽然不知道包裹里装了什么东西,但他有可能中途掉包,数据完整性就是指如果被掉包,我们能轻松发现并拒收
  • 身份校验安全性:保证数据到达用户期望的目的地。就像我们邮寄包裹时,虽然是一个封装好的未掉包的包裹,但必须确定这个包裹不会送错地方,通过身份校验来确保送对了地方

改进

双向的身份认证

客户端检查服务端证书,确认是否由自己信任的证书签发机构签发。 如果不是,将是否继续通讯的决定权交给用户选择 ( 注意,这里将是一个安全缺陷 ) 。如果检查无误或者用户选择继续,则客户端认可服务端的身份。

服务端要求客户端发送证书,并检查是否通过验证。失败则关闭连接,认证成功则从客户端证书中获得客户端的公钥,一般为 1024 位或者 2048 位。到此,服务器客户端双方的身份认证结束,双方确保身份都是真实可靠的。

数据传输的机密性

客户端和服务端在开始传输数据之前,会协商传输过程需要使用的加密算法。 客户端发送协商请求给服务端 , 其中包含自己支持的非对称加密的密钥交换算法 ( 一般是 RSA), 数据签名摘要算法 ( 一般是 SHA 或者 MD5) , 加密传输数据的对称加密算法 ( 一般是 DES), 以及加密密钥的长度。 服务端接收到消息之后,选中安全性最高的算法,并将选中的算法发送给客户端,完成协商。客户端生成随机的字符串,通过协商好的非对称加密算法,使用服务端的公钥对该字符串进行加密,发送给服务端。 服务端接收到之后,使用自己的私钥解密得到该字符串。在随后的数据传输当中,使用这个字符串作为密钥进行对称加密。

防止重放攻击

SSL 使用序列号来保护通讯方免受报文重放攻击。这个序列号被加密后作为数据包的负载。在整个 SSL 握手中 , 都有一个唯一的随机数来标记 SSL 握手。 这样防止了攻击者嗅探整个登录过程,获取到加密的登录数据之后,不对数据进行解密 , 而直接重传登录数据包的攻击手法。

可以看到,鉴于电子商务等安全上的需求, HTTPS 对比 HTTP ,在安全方面已经取得了极大的增强。总结来说, HTTPS 的改进点在于创造性的使用了非对称加密算法,在不安全的网路上,安全的传输了用来进行对称加密的密钥,综合利用了非对称加密的安全性和对称加密的快速性。

HTTPS 与 HTTP 原理区别

HTTPS 主要由两部分组成: HTTP + SSL / TLS ,也就是在 HTTP 上又加了一层处理加密信息的模块。服务端和客户端的信息传输都会通过 TLS 进行加密,所以传输的数据都是加密后的数据。

HTTP 原理

  • 客户端的浏览器首先要通过网络与服务器建立连接,该连接是通过 TCP 来完成的,一般 TCP 连接的端口号是 80 。 建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符( URL )、协议版本号,后边是 MIME 信息包括请求修饰符、客户机信息和许可内容
  • 服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是 MIME 信息包括服务器信息、实体信息和可能的内容

HTTPS 原理

  • 客户端将它所支持的算法列表和一个用作产生密钥的随机数发送给服务器
  • 服务器从算法列表中选择一种加密算法,并将它和一份包含服务器公用密钥的证书发送给客户端;该证书还包含了用于认证目的的服务器标识,服务器同时还提供了一个用作产生密钥的随机数
  • 客户端对服务器的证书进行验证(有关验证证书,可以参考数字签名),并抽取服务器的公用密钥;然后,再产生一个称作 pre_master_secret 的随机密码串,并使用服务器的公用密钥对其进行加密(参考非对称加 / 解密),并将加密后的信息发送给服务器
  • 客户端与服务器端根据 pre_master_secret 以及客户端与服务器的随机数值独立计算出加密和 MAC 密钥(参考 DH 密钥交换算法)
  • 客户端将所有握手消息的 MAC 值发送给服务器
  • 服务器将所有握手消息的 MAC 值发送给客户端

优缺点

优点

  • 使用 HTTPS 协议可认证用户和服务器,确保数据发送到正确的客户机和服务器
  • HTTPS 协议是由 SSL+HTTP 构建的可进行加密传输、身份认证的网络协议,要比 HTTP 安全,可防止数据在传输过程中被窃取、改变,确保数据的完整性
  • HTTPS 是现行架构下最安全的解决方案,虽然不是绝对安全,但它大幅增加了中间人攻击的成本

缺点

  • 相同网络环境下, HTTPS 协议会使页面的加载时间延长近 50% ,增加 10% 到 20% 的耗电。此外, HTTPS 协议还会影响缓存,增加数据开销和功耗
  • HTTPS 协议的安全是有范围的,在黑客攻击、拒绝服务攻击和服务器劫持等方面几乎起不到什么作用
  • 最关键的是, SSL 证书的信用链体系并不安全。特别是在某些国家可以控制 CA 根证书的情况下,中间人攻击一样可行
  • 成本增加。部署 HTTPS 后,因为 HTTPS 协议的工作要增加额外的计算资源消耗,例如 SSL 协议加密算法和 SSL 交互次数将占用一定的计算资源和服务器成本。在大规模用户访问应用的场景下,服务器需要频繁地做加密和解密操作,几乎每一个字节都需要做加解密,这就产生了服务器成本。随着云计算技术的发展,数据中心部署的服务器使用成本在规模增加后逐步下降,相对于用户访问的安全提升,其投入成本已经下降到可接受程度